package principal;

import java.io.*;

// FALTANDO LEIS: 1, 7
public class Conversor {
	
	private String superClasse = "_Object";
	private String[] tipos = {"byte", "short", "int", "long", "String", "float", "double", "char", "boolean", "void"};
	private String texto;
	private String nomeArquivo;
	private String textoSuperClasse = "public class " + superClasse + "\n{\n"; 
	
	public void setTexto(String valor) {
		texto = valor;
	}
 
	public String getTexto() {
		return texto;
	} 
	
	public void Leitor(String _arquivoOrigem, String _superClasse) throws IOException {
		nomeArquivo  = _arquivoOrigem;
		superClasse = _superClasse;
		FileReader reader = new FileReader("arquivos_entrada/" + nomeArquivo);
		BufferedReader leitor = new BufferedReader(reader);  
		String linha = null;  
	    boolean flag = true;
		while((linha = leitor.readLine()) != null) {
			flag = true;
			for (String item : tipos) {
				for (int i = 0; i < 2; i++) {
					if(i == 1)
					{
						item = "static " + item;
					}
					if(linha.trim().startsWith(item)) 
					{
						if(linha.contains("("))
						{
							setTexto(getTexto() + "\n" + "public " + linha); // LEI 8
						}
						else
						{
							textoSuperClasse = textoSuperClasse + "public " + linha + "\n"; // LEI 3
						}
						flag = false;
					}
					else if(linha.trim().startsWith("protected " + item)) 
					{
						if(linha.contains("("))
						{
							setTexto(getTexto() + "\n" + linha.replace("protected", "public")); // LEI 9
						}
						else
						{
							textoSuperClasse = textoSuperClasse + linha.replace("protected", "public") + "\n"; // LEI 4
						}
						flag = false;
					}
					else if(linha.trim().startsWith("private " + item)) 
					{
						if(linha.contains("("))
						{
							setTexto(getTexto() + "\n" + linha.replace("private", "public")); // LEI 10
						}
						else
						{
							textoSuperClasse = textoSuperClasse + linha.replace("private", "public") + "\n"; // LEI 5
						}
						flag = false;
					}
					else if(linha.trim().startsWith("public " + item))
					{
						textoSuperClasse = textoSuperClasse + linha + "\n";
						flag = false;
					}
				}
			}
			if(flag)
			{
				setTexto(getTexto() + "\n" + linha);
			}
		}
		setTexto(getTexto().replaceFirst("null", ""));
		leitor.close();  
		reader.close();
		
		// LEI 6
		textoSuperClasse = textoSuperClasse + "}";
		FileWriter writer = new FileWriter("arquivos_saida/" + superClasse); 
		PrintWriter saida = new PrintWriter(writer);  
		saida.println(textoSuperClasse); 
		saida.close();  
		writer.close();
	}
	
	public void GerarArquivo() throws IOException
	{
		FileWriter writer = new FileWriter("arquivos_saida/" + nomeArquivo); 
		PrintWriter saida = new PrintWriter(writer);  
		saida.println(getTexto()); 
		saida.close();  
		writer.close();
	}
	
	public void Lei2()
	{
		int indexClass = getTexto().indexOf("class");
		int indexChave = getTexto().indexOf("{");
		String nomeClasse = getTexto().substring(indexClass + 6, indexChave);
		String novo = nomeClasse + "extends " + superClasse;
		setTexto(getTexto().replaceFirst(nomeClasse, novo));
	}
}
